版本控制系统
代码版本控制系统大致可以分为三代:本地版本控制系统
代码存储在本地,无法实现多人协作的需求集中化的版本控制系统
解决了多人协作的问题,但是因为代码都是统一存储在服务器上,当无法连接服务器上的时候,无法查看日志和提交比较代码分布式的版本控制系统
这种控制系统的特点是,任何人都可以复制一份和服务上相同的代码,当无法连接服务器的时候,仍然可以提交代码,创建分支Git 中文件夹 .git
当我们使用git init
初始化git
仓库的时候,当前文件夹下出生成一个 .git
的隐藏文件夹,这个文件夹内存储着我们进行 git 操作的一些数据:- 存储当前的分支(
HEAD
) - 存储当前所有的分支信息(
config
) - 存储提交的文件快照数据(
objects
) - ....
三种基本文件
当我们输入一些git命令的时候,git 根据的输入的命令会生成一些文件,有的文件用来存储当前提交的文件内容,有的文件用来存储我们当前提交的信息,这些文件都被存储在objects
这个文件夹之内,有三种基本文件在我们使用 git 进行数据存储时是息息相关的:blob
文件tree
文件commit
文件
blob
文件
blob 文件用来存储我们提交代码的文件快照,这种文件存储的是压缩后的文件内容代码实践下 blob 文件是如何生成的:- git 初始化:

- 初始化的 git 仓库内创建两个文件:
1.txt
与2.txt
, 内容分别是 1 和 2 - 执行
git add
:

- 查看出现的
d8
和56
这两个文件夹

git cat-file [-t][-p]
来查看文件类型或者 文件内容

git add
命令生成的 56
和 d8
文件都是 blob
类型文件,并且存储的是文件的内容tree
文件
继续上面的操作,这次执行 git commit
命令:
objects
文件:
3c
和 96
查看 3c
文件夹 
commit
文件
查看生成的 96
文件夹,我们可以看到如下内容:

三种文件之间的关系
综上所述,三种类型的文件的主要作用是:blob:存储提交文件的快照 tree:存储提交文件的文件目录以及文件名,blob 文件地址等信息 commit: 存储提交信息,提交生成的 tree 文件用一张图可以说明三种类型文件之间的关系:
总结
- 使用
git add .
命令时,将变动内容的文件保存生成 blob 文件 - 使用
git commit
命令时, 生成 tree 文件与 commit 文件 - 当前分支的指针指向新的 commit 节点,节点中存在 parent 字段,表明上一次提交 commit 文件,逐级向上,一直到第一次提交,这些 commit 连接成为提交记录(
git log
)